맨위로가기

프로그래밍 스타일

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

프로그래밍 스타일은 코드의 가독성, 유지보수성, 일관성을 높이기 위한 일련의 규칙과 지침을 의미한다. 코딩 스타일은 들여쓰기, 공백 문자 사용, 명명 규칙, 대소문자 구분, 주석 사용 등을 포함하며, 자동화 도구를 통해 준수 여부를 확인할 수 있다. 주요 프로그래밍 언어별로 코딩 스타일 가이드가 존재하며, 프로젝트 및 한국 개발 환경에서도 다양한 스타일이 적용된다.

2. 코딩 스타일의 구성 요소

코딩 스타일을 이루는 일반적인 요소는 다음과 같다.


  • 들여쓰기공백 문자 사용: 코드 블록 구조를 일관성 있게 유지하고 가독성을 높인다.
  • 명명 규칙: 변수, 함수, 클래스 등의 이름을 짓는 방식을 표준화하는 규칙이다. 언어 관례에 따라 카멜 표기법, 스네이크 표기법, 파스칼 표기법 등을 사용한다.
  • 대소문자 구분: 키워드나 식별자를 작성할 때 프로그래밍 언어의 구문에 따라 대소문자를 일관되게 사용하는 것을 의미한다.
  • 주석 사용: 코드 실행에는 영향을 주지 않으면서 코드에 대한 설명이나 추가 정보를 제공한다.


소스 코드의 외형은 코드의 유지보수성과 가독성에 영향을 미친다. 코드 외형 중 형식(포맷)에 관한 부분은 가이드라인을 넘어 규칙으로 정해지기도 하며, 코드 포맷터와 같은 도구를 이용해 자동으로 스타일을 통일하기도 한다.

2. 1. 들여쓰기

들여쓰기 방식은 코드의 제어 흐름과 블록을 시각적으로 식별하는 데 도움을 준다. 같은 기능을 수행하는 코드라도 프로그래머가 선택한 들여쓰기 스타일에 따라 다르게 보일 수 있다. 예를 들어, 아래의 코드들은 모두 동일한 논리로 동작하지만, 들여쓰기 방식에서 차이를 보인다.



if (hours < 24 && minutes < 60 && seconds < 60) {

return true;

} else {

return false;

}



또는



if (hours < 24 && minutes < 60 && seconds < 60)

{

return true;

}

else

{

return false;

}



일부 프로그래밍 언어에서는 들여쓰기 자체가 문법의 일부로서 오프사이드 규칙에 따라 코드 블록을 구분한다. 이러한 언어에서는 들여쓰기가 단순히 스타일의 문제가 아니라 코드의 구조를 결정하는 필수 요소이다.

반면, 공백 문자를 문법적으로 무시하는 많은 언어(자유 형식 언어)에서는 들여쓰기가 코드의 실행에 직접적인 영향을 주지 않는다. 하지만 이런 언어에서도 들여쓰기는 코드의 가독성을 크게 향상시키는 중요한 요소로 간주된다. 일관되고 적절한 들여쓰기는 코드를 이해하기 쉽게 만들지만, 그렇지 않은 경우 코드를 읽고 이해하기 어렵게 만들 수 있다.

예를 들어, 다음 두 코드는 기능적으로 동일하지만 들여쓰기 방식에 따라 가독성에서 큰 차이를 보인다.

  • 일반적으로 권장되는 스타일:



if (hours < 24 && minutes < 60 && seconds < 60) {

return true;

} else {

return false;

}


  • 가독성이 떨어지는 스타일:



if ( hours < 24

&& minutes < 60

&& seconds < 60

)

{return true

;} else

{return false

;}



결론적으로 소스 코드의 외형, 특히 들여쓰기와 같은 형식(포맷)은 코드의 유지 보수성과 가독성에 직접적인 영향을 미친다. 때로는 코드 포맷팅 가이드라인을 규칙으로 정하고, 특정 프로그램(코드 포맷터)을 사용하여 자동으로 일관된 스타일을 유지하기도 한다.

2. 1. 1. 탭 vs 스페이스

들여쓰기 스타일은 제어 흐름과 코드 블록을 식별하는 등 다양한 방식으로 독자에게 도움을 줄 수 있다. 일부 프로그래밍 언어에서는 들여쓰기가 코드 블록을 구분하는 데 사용되므로 스타일의 문제가 아니다. 그러나 공백을 무시하는 언어에서는 들여쓰기가 가독성에 영향을 미칠 수 있다.

예를 들어, 일반적으로 사용되는 스타일로 형식화된 코드는 다음과 같다.

```c

if (hours < 24 && minutes < 60 && seconds < 60) {

return true;

} else {

return false;

}

```

반면, 보기 좋지 않게 형식화된 코드는 다음과 같다.

```c

if ( hours < 24

&& minutes < 60

&& seconds < 60

)

{return true

;} else

{return false

;}

```

자유 형식 언어는 공백 문자(스페이스, 탭, 줄 바꿈 등)를 무시한다. 이는 프로그래머가 코드의 의미에 영향을 주지 않으면서 다양한 방식으로 코드를 스타일링할 수 있다는 것을 의미한다. 일반적으로 프로그래머는 가독성을 향상시키는 것으로 간주되는 스타일을 사용한다.

아래 두 코드 조각은 논리적으로 동일하지만 공백 사용 방식에서 차이가 있다.

```c

int i;

for(i=0;i<10;++i){

printf("%d",i*i+i);

}

```

```c

int i;

for (i = 0; i < 10; ++i) {

printf("%d", i * i + i);

}

```

들여쓰기를 위해 탭 키를 사용할지, 스페이스를 사용할지는 프로그래머들 사이에서 논쟁의 여지가 있는 주제이다. 가장 큰 문제는 서로 다른 개발 환경에서 탭 정지(Tab stop) 위치가 다르게 설정될 수 있다는 점이다. 또한, 탭과 스페이스를 혼용하여 사용할 경우 코드 정렬 문제가 발생할 수 있다.

예를 들어, 한 프로그래머는 탭 정지를 4칸으로 설정하고 다음과 같이 코드를 작성했다고 가정해보자.



int ix; // 배열을 스캔할 인덱스

long sum; // 합계에 대한 누산기



다른 프로그래머가 탭 정지를 8칸으로 설정된 환경에서 이 코드를 보면 다음과 같이 보이게 되어 가독성이 떨어질 수 있다.



int ix; // 배열을 스캔할 인덱스

long sum; // 합계에 대한 누산기



이 문제에 대한 일반적인 해결책 중 하나는 코드 정렬 목적으로 탭 사용을 금지하거나, 팀 또는 프로젝트 내에서 탭 정지 설정에 대한 규칙을 정하는 것이다. 탭은 논리적인 들여쓰기 단계 구분에만 일관되게 사용하고, 세로 정렬에는 사용하지 않는다면 효과적으로 활용될 수 있다.

```cpp

class MyClass {

int foobar(

int qux, // 첫 번째 매개변수

int quux); // 두 번째 매개변수

int foobar2(

int qux, // 첫 번째 매개변수

int quux, // 두 번째 매개변수

int quuux); // 세 번째 매개변수

};

2. 2. 수직 정렬

오타로 인한 버그를 더 명확하게 만들기 위해 비슷한 코드 요소들을 수직으로 정렬하는 방식이다. 예를 들어, 다음 두 코드를 비교해 보자.

정렬되지 않은 코드:



$search = array('a', 'b', 'c', 'd', 'e');

$replacement = array('foo', 'bar', 'baz', 'quux');

// 다른 예시:

$value = 0;

$anothervalue = 1;

$yetanothervalue = 2;



수직으로 정렬된 코드:



$search = array('a', 'b', 'c', 'd', 'e');

$replacement = array('foo', 'bar', 'baz', 'quux');

// 다른 예시:

$value = 0;

$anothervalue = 1;

$yetanothervalue = 2;



일부 프로그래머는 이처럼 유사한 요소들을 수직으로 정렬하는 것이 오타로 인한 버그를 더 쉽게 발견하게 해준다고 주장한다. 위 예시에서 정렬된 코드는 `$search` 배열과 `$replacement` 배열의 각 요소가 서로 대응된다는 것을 시각적으로 보여준다. 만약 `$search` 배열의 요소 개수가 `$replacement` 배열보다 하나 더 많다면, 이것이 버그일 경우 정렬된 코드에서는 눈으로 쉽게 발견할 가능성이 더 높다.

하지만 수직 정렬에는 다음과 같은 단점도 존재한다.

  • 유지보수 부담: 코드 줄 사이에 의존성이 생긴다. 예를 들어, 어느 한 줄에 긴 이름의 변수나 값이 추가되어 열 너비가 늘어나면, 정렬을 유지하기 위해 해당 열의 모든 줄을 수정해야 한다. 이는 코드 변경 사항을 검토하고 나중에 이해하는 데 더 많은 노력을 요구한다.
  • 취약성: 코드를 수정하는 프로그래머가 정렬 형식을 제대로 유지하지 않으면, 오히려 정렬되지 않은 코드보다 읽기 어려운 시각적인 혼란을 야기할 수 있다. 특히 변수 이름 변경과 같은 간단한 리팩터링 작업만으로도 전체적인 정렬 형식이 깨질 수 있다.
  • 수정 기피: 정렬을 유지하는 데 추가적인 노력이 들기 때문에, 프로그래머들이 식별자 이름을 개선하는 것과 같이 코드 품질에 유익한 변경을 꺼리게 만들 수 있다.
  • 고정폭 글꼴 의존성: 코드를 제대로 정렬된 형태로 보려면 고정폭 글꼴을 사용해야 한다. 비례 글꼴 환경에서는 정렬이 틀어져 보일 수 있다.


정렬 유지는 탄력적 탭 정지와 같은 기능을 지원하는 편집 도구를 사용하면 어느 정도 해결될 수 있지만, 이는 특정 도구에 대한 의존성을 높이는 결과를 낳는다.

예를 들어, 위 정렬된 코드에서 변수명을 `$replacement`에서 `$r`로, `$anothervalue`를 `$a`로 변경하는 간단한 리팩토링을 수행하면 다음과 같이 정렬이 어긋나게 된다.



$search = array('a', 'b', 'c', 'd', 'e');

$r = array('foo', 'bar', 'baz', 'quux');

$value = 0;

$a = 1;

$yetanothervalue = 2;



반면, 정렬되지 않은 코드에서는 이러한 변경이 시각적인 형식에 큰 영향을 주지 않는다.



$search = array('a', 'b', 'c', 'd', 'e');

$r = array('foo', 'bar', 'baz', 'quux');

$value = 0;

$a = 1;

$yetanothervalue = 2;



결론적으로 소스 코드의 시각적인 외형, 즉 코드 포맷은 유지보수와 가독성에 직접적인 영향을 미친다.

2. 3. 공백 문자

코딩 스타일의 일반적인 요소 중 하나는 들여쓰기 및 공백 문자 사용이다. 이는 일관된 블록 구조를 보장하고 가독성을 향상시키는 데 도움을 준다.

자유 형식 언어는 공백 문자(공백, 탭, 줄 바꿈)를 무시하므로, 프로그래머는 코드의 의미에 영향을 주지 않으면서 다양한 방식으로 코드를 스타일링할 수 있다. 일반적으로 프로그래머는 가독성을 향상시키는 것으로 여겨지는 스타일을 사용한다.

아래 두 C 코드 조각은 논리적으로 동일하지만 공백 사용 방식에서 차이가 있다.

공백과 들여쓰기가 부족한 첫 번째 예시:

```c

int i;

for(i=0;i<10;++i){

printf("%d",i*i+i);

}

```

공백과 들여쓰기를 추가하여 가독성을 높인 두 번째 예시:

```c

int i;

for (i = 0; i < 10; ++i) {

printf("%d", i * i + i);

}

```

탭 키를 공백 대신 사용하는 것은 논쟁의 여지가 있는 주제이다. 서로 다른 개발 환경에서 탭 정지 위치가 다르게 설정될 수 있으며, 탭과 공백을 혼용하여 사용할 경우 코드 정렬 문제가 발생할 수 있다.

예를 들어, 한 프로그래머는 탭 정지를 4칸으로 설정하고 다음과 같이 코드를 작성할 수 있다.

```c

int ix; // 배열을 스캔할 인덱스

long sum; // 합계에 대한 누산기

```

그러나 다른 프로그래머가 탭 정지를 8칸으로 설정한 환경에서 이 코드를 보면 다음과 같이 정렬이 틀어져 보여 가독성이 떨어진다.

```c

int ix; // 배열을 스캔할 인덱스

long sum; // 합계에 대한 누산기

```

이 문제에 대한 일반적인 해결책 중 하나는 코드 정렬에 탭 사용을 금지하거나, 탭 정지 설정 방법에 대한 명확한 규칙을 정하는 것이다. 탭은 논리적인 들여쓰기 용도로만 일관되게 사용하고, 정렬에는 사용하지 않는 것이 좋다.

다음은 C++ 코드에서 매개변수 정렬 등에 공백을 활용한 예시이다.

```cpp

class MyClass {

int foobar(

int qux, // 첫 번째 매개변수

int quux); // 두 번째 매개변수

int foobar2(

int qux, // 첫 번째 매개변수

int quux, // 두 번째 매개변수

int quuux); // 세 번째 매개변수

};

```

결론적으로 소스 코드의 외형, 특히 공백과 들여쓰기 같은 포맷은 코드의 유지보수성과 가독성에 직접적인 영향을 미친다. 때로는 이러한 포맷 규칙을 가이드라인이 아닌 명확한 규칙으로 정하고, 자동 정형 도구를 사용하여 일관성을 유지하기도 한다.

2. 4. 명명 규칙

변수, 함수, 클래스 등의 이름을 짓는 방식을 표준화하는 규칙이다. 이는 코드의 가독성과 유지보수성을 높이는 데 중요한 역할을 한다. 일반적으로 사용하는 프로그래밍 언어의 관례에 따라 카멜 표기법(camelCase), 스네이크 표기법(snake_case), 또는 파스칼 표기법(PascalCase) 등의 표기법 중 하나를 선택하여 일관성 있게 적용한다.

2. 5. 주석

주석코드의 실행에는 영향을 주지 않으면서, 코드 내부에 추가적인 설명이나 맥락 정보를 제공하는 역할을 한다. 소스 코드의 외형은 유지보수와 가독성에 직접적인 영향을 미치는데, 적절한 주석 사용은 이러한 코드의 외형을 개선하여 가독성과 유지보수성을 높이는 데 기여한다.

3. 자동화

코딩 스타일 준수는 자동화 도구를 통해 강제될 수 있다. 이러한 도구는 미리 정해진 가이드라인에 따라 코드 서식을 자동으로 지정해준다. 자동화 도구를 사용하면 스타일 일관성을 유지하기 위한 수동 노력을 줄일 수 있어, 프로그래머는 코드의 로직과 기능 구현에 더 집중할 수 있다. 예를 들어, 파이썬Black이나 C++clang-format과 같은 도구는 정해진 코딩 표준에 맞춰 코드를 자동으로 재구성한다.

소스 코드의 외형, 특히 포맷은 코드의 유지보수성과 가독성에 영향을 미친다. 따라서 포맷과 관련된 규칙은 때때로 가이드라인을 넘어, 특정 프로그램을 이용한 자동 정형(포맷팅)에 맡겨지기도 한다.

4. 주요 프로그래밍 언어별 코딩 스타일 가이드

주요 프로그래밍 언어별로 코드의 가독성과 일관성을 유지하기 위한 공식적이거나 널리 통용되는 코딩 스타일 가이드가 존재한다. 아래는 몇 가지 주요 언어의 스타일 가이드 목록이다.

언어스타일 가이드 이름/링크제공처/비고
Java[https://www.oracle.com/java/technologies/cc-java-programming-language.html Java 프로그래밍 언어 코드 컨벤션]썬 마이크로시스템즈 (현재 유지보수되지 않음)
Python[https://www.python.org/dev/peps/pep-0008/ Python 코드 스타일 가이드 (PEP 8)]Python Software Foundation
PHP[https://pear.php.net/manual/en/standards.php PHP::PEAR 코딩 표준]PEAR
Perl[https://perldoc.perl.org/perlstyle.html Perl 스타일 가이드]Perl Programming Documentation
Object Pascal[https://edn.embarcadero.com/article/10280 객체 파스칼 스타일 가이드]Embarcadero Developer Network
C++[https://en.wikibooks.org/wiki/C%2B%2B_Programming/Programming_Languages/C%2B%2B/Code/Style_Conventions C++ 프로그래밍/코드 스타일]Wikibooks
Caml[https://caml.inria.fr/resources/doc/guides/guidelines.en.html Caml 프로그래밍 가이드라인]INRIA
Visual Basic[https://docs.microsoft.com/ja-jp/dotnet/visual-basic/programming-guide/program-structure/coding-conventions Visual Basic 코딩 규칙]Microsoft Docs
C#[https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/inside-a-program/coding-conventions C# 코딩 규칙]Microsoft Docs



각 언어별 상세한 내용이나 추가적인 가이드라인은 아래 하위 섹션에서 확인할 수 있다.

4. 1. Java


  • [https://www.oracle.com/java/technologies/cc-java-programming-language.html Java 프로그래밍 언어 코드 컨벤션] - 썬 마이크로시스템즈에서 초기에 만든 규약으로, 현재는 유지보수되지 않고 있다.

4. 2. Python

Python의 공식적인 코드 스타일 가이드는 PEP 8로 알려져 있다. 이 가이드라인은 코드의 가독성과 일관성을 높이는 것을 목표로 하며, 많은 파이썬 개발자들이 따르는 사실상의 표준이다.

  • [https://www.python.org/dev/peps/pep-0008/ Python 코드 스타일 가이드 (PEP 8)] - 파이썬 공식 웹사이트에서 제공하는 스타일 가이드.

4. 3. PHP

PHP의 코딩 표준 중 하나로 PEAR에서 제안한 코딩 표준이 있다. ([https://pear.php.net/manual/en/standards.php PHP::PEAR 코딩 표준])

4. 4. C/C++

4. 5. C#


  • [https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/inside-a-program/coding-conventions C# 코딩 규칙 (C# 프로그래밍 가이드) | Microsoft Docs]

4. 6. 기타 언어

5. 프로젝트별 코딩 스타일



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com